﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.Enumerations;
using System.IO;
using Telerik.WinControls.UI;
using log4net;
using System.Collections;
namespace QuanLyNhaSach
{
    public partial class frmPhieuThu : Form
    {
        //Tao Parttern Seleton
        static frmPhieuThu doituong = null;
        ArrayList test_DSKH;
        public static frmPhieuThu TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmPhieuThu();
            return doituong;
        }
        public frmPhieuThu()
        {
            InitializeComponent();
        }
        //private void bt_anhien_ToggleStateChanged(object sender, Telerik.WinControls.UI.StateChangedEventArgs args)
        //{
        //    try
        //    {
        //        if (!(bt_anhien.ToggleState == ToggleState.On)) 
        //        {
        //            bt_anhien.Text = "Trở lại";
        //            gv_phieuthu.Visible = false;
        //            this.Width = 625;
        //            this.Height = 290;
        //        }
        //        else 
        //        {
        //            bt_anhien.Text = "Lọc HD chưa trả hết";
        //            gv_phieuthu.Visible = true;
        //            this.Width=625;
        //            this.Height = 501;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }


        //}
        #region "Khai bao bien"
        sv_QuanLyNhaSach.AdapterClient service = new sv_QuanLyNhaSach.AdapterClient();
        private ILog logger;
        DataSet ds_khachang;
        string manv = frmDangNhap.maNV_FromDangNhap;//frmDangNhap.maNV_FromDangNhap;
        string tennv = frmDangNhap.hoTenNV_FormDangNhap;
        #endregion
        #region "Ham chuyen so thanh chu"
        private static string Chu(string gNumber)
        {
            string result = "";
            switch (gNumber)
            {
                case "0":
                    result = "không";
                    break;
                case "1":
                    result = "một";
                    break;
                case "2":
                    result = "hai";
                    break;
                case "3":
                    result = "ba";
                    break;
                case "4":
                    result = "bốn";
                    break;
                case "5":
                    result = "năm";
                    break;
                case "6":
                    result = "sáu";
                    break;
                case "7":
                    result = "bảy";
                    break;
                case "8":
                    result = "tám";
                    break;
                case "9":
                    result = "chín";
                    break;
            }
            return result;
        }
        private static string Donvi(string so)
        {
            string Kdonvi = "";

            if (so.Equals("1"))
                Kdonvi = "";
            if (so.Equals("2"))
                Kdonvi = "nghìn";
            if (so.Equals("3"))
                Kdonvi = "triệu";
            if (so.Equals("4"))
                Kdonvi = "tỷ";
            if (so.Equals("5"))
                Kdonvi = "nghìn tỷ";
            if (so.Equals("6"))
                Kdonvi = "triệu tỷ";
            if (so.Equals("7"))
                Kdonvi = "tỷ tỷ";

            return Kdonvi;
        }
        private static string Tach(string tach3)
        {
            string Ktach = "";
            if (tach3.Equals("000"))
                return "";
            if (tach3.Length == 3)
            {
                string tr = tach3.Trim().Substring(0, 1).ToString().Trim();
                string ch = tach3.Trim().Substring(1, 1).ToString().Trim();
                string dv = tach3.Trim().Substring(2, 1).ToString().Trim();
                if (tr.Equals("0") && ch.Equals("0"))
                    Ktach = " không trăm lẻ " + Chu(dv.ToString().Trim()) + " ";
                if (!tr.Equals("0") && ch.Equals("0") && dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm ";
                if (!tr.Equals("0") && ch.Equals("0") && !dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm lẻ " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (tr.Equals("0") && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm mười " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("0"))
                    Ktach = " không trăm mười ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("5"))
                    Ktach = " không trăm mười lăm ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười " + Chu(dv.Trim()).Trim() + " ";

                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười lăm ";

            }


            return Ktach;

        }
        public static string So_chu(double gNum)
        {
            if (gNum == 0)
                return "Không đồng";

            string lso_chu = "";
            string tach_mod = "";
            string tach_conlai = "";
            double Num = Math.Round(gNum, 0);
            string gN = Convert.ToString(Num);
            int m = Convert.ToInt32(gN.Length / 3);
            int mod = gN.Length - m * 3;
            string dau = "[+]";

            // Dau [+ , - ]
            if (gNum < 0)
                dau = "[-]";
            dau = "";

            // Tach hang lon nhat
            if (mod.Equals(1))
                tach_mod = "00" + Convert.ToString(Num.ToString().Trim().Substring(0, 1)).Trim();
            if (mod.Equals(2))
                tach_mod = "0" + Convert.ToString(Num.ToString().Trim().Substring(0, 2)).Trim();
            if (mod.Equals(0))
                tach_mod = "000";
            // Tach hang con lai sau mod :
            if (Num.ToString().Length > 2)
                tach_conlai = Convert.ToString(Num.ToString().Trim().Substring(mod, Num.ToString().Length - mod)).Trim();

            ///don vi hang mod 
            int im = m + 1;
            if (mod > 0)
                lso_chu = Tach(tach_mod).ToString().Trim() + " " + Donvi(im.ToString().Trim());
            /// Tach 3 trong tach_conlai

            int i = m;
            int _m = m;
            int j = 1;
            string tach3 = "";
            string tach3_ = "";

            while (i > 0)
            {
                tach3 = tach_conlai.Trim().Substring(0, 3).Trim();
                tach3_ = tach3;
                lso_chu = lso_chu.Trim() + " " + Tach(tach3.Trim()).Trim();
                m = _m + 1 - j;
                if (!tach3_.Equals("000"))
                    lso_chu = lso_chu.Trim() + " " + Donvi(m.ToString().Trim()).Trim();
                tach_conlai = tach_conlai.Trim().Substring(3, tach_conlai.Trim().Length - 3);

                i = i - 1;
                j = j + 1;
            }
            if (lso_chu.Trim().Substring(0, 1).Equals("k"))
                lso_chu = lso_chu.Trim().Substring(10, lso_chu.Trim().Length - 10).Trim();
            if (lso_chu.Trim().Substring(0, 1).Equals("l"))
                lso_chu = lso_chu.Trim().Substring(2, lso_chu.Trim().Length - 2).Trim();
            if (lso_chu.Trim().Length > 0)
                lso_chu = dau.Trim() + " " + lso_chu.Trim().Substring(0, 1).Trim().ToUpper() + lso_chu.Trim().Substring(1, lso_chu.Trim().Length - 1).Trim() + " đồng chẵn.";

            return lso_chu.ToString().Trim();

        }
        #endregion
        private void frmPhieuThu_Load(object sender, EventArgs e)
        {            
            logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            dtpNgaythu.Value = DateTime.Now;
            try
            {
                //Chinh do dai cua cac cot trong muiltcombobox
                RadMultiColumnComboBoxElement multiColumnComboElement = this.cmbKhachhang.MultiColumnComboBoxElement;
                multiColumnComboElement.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
                multiColumnComboElement.DropDownMinSize = new Size(300, 200);
                //load danh sach khach hang
                ds_khachang = new DataSet();
                ds_khachang.ReadXml(new StringReader(service.LayDS_KhachHang()));
                test_DSKH =new ArrayList();
                if (ds_khachang.Tables.Count != 0)
                {
                    for (int i = 0; i < ds_khachang.Tables[0].Rows.Count; i++)
                    {
                        test_DSKH.Add(ds_khachang.Tables[0].Rows[i]["hotenkh"].ToString().Trim());
                    }
                    cmbKhachhang.DataSource = ds_khachang.Tables[0];
                    cmbKhachhang.DisplayMember = "hotenkh";
                    cmbKhachhang.ValueMember = "makh";
                }
                //load len ten nhan vien
                lblTenNV.Text = tennv;
                cmbkhoanmuc.SelectedIndex = 0;
                txtChungtu.Focus();
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }

        }

        private void cmbKhachhang_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DataSet ds = new DataSet();
                ds.ReadXml(new StringReader(service.BaoCaoCongNo(DateTime.Now, DateTime.Now, "", cmbKhachhang.SelectedValue.ToString().Trim(), true)));
                if (ds.Tables.Count>0)
                {
                    txtcongno.Text = double.Parse(ds.Tables[0].Rows[0]["nocuoiky"].ToString().Trim()).ToString("#,##0");
                }
                txtDiachi.Text = cmbKhachhang.EditorControl.Rows[cmbKhachhang.SelectedIndex].Cells["diachikh"].Value.ToString();
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void bt_luu_Click(object sender, EventArgs e)
        {
            Luu();

        }

        private void Luu()
        {
            errorProvider1.Clear();
            if (txtChungtu.Text == "")
            {
                errorProvider1.SetError(txtChungtu, "Số chứng từ không được bỏ trống");
                txtChungtu.Focus();
                return;
            }
            if (test_DSKH.Contains(cmbKhachhang.Text.Trim()) == false)
            {
                errorProvider1.SetError(cmbKhachhang, "Khách hàng không hợp lệ");
                cmbKhachhang.Focus();
                return;
            }
            if (cmbkhoanmuc.Text.Trim() == "")
            {
                errorProvider1.SetError(cmbkhoanmuc, "Chưa chọn khoản mục");
                cmbkhoanmuc.Focus();
                return;
            }
            if (txttientra.Text == "" || txttientra.Text == "0")
            {
                errorProvider1.SetError(txttientra, "Tiền thu không được bỏ trống hoặc bằng 0");
                txttientra.Focus();
                return;
            }
            try
            {
                string mapt = xulyma();

                if (MessageBox.Show("Bạn có muốn thêm phiếu chi này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
                {
                    if (!service.InsertPhieuThu(mapt, cmbKhachhang.SelectedValue.ToString().Trim(), manv, dtpNgaythu.Value, cmbkhoanmuc.Text, txtLydothu.Text, double.Parse(txttientra.Text), txtChungtu.Text))
                    {
                        MessageBox.Show("Lưu thất bại!", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    else
                    {
                        MessageBox.Show("Lưu thành công!", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cmbKhachhang.SelectedIndex = -1;
                        txtDiachi.Text = "";
                        txtcongno.Text = "0";
                        txtLydothu.Text = "";
                        txttientra.Text = "";
                        txtChungtu.Text = "";
                        dtpNgaythu.Value = DateTime.Now;
                        cmbkhoanmuc.SelectedIndex = -1;
                        dtpNgaythu.Focus();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private string xulyma()
        {
            DataSet ds_tam = new DataSet();
            string mamoi="";
            try
            {
                string chuoi = "PT" + DateTime.Today.Year.ToString("0000") + DateTime.Today.Month.ToString("00");
                ds_tam.ReadXml(new StringReader(service.selectqueryByText("select top 1 mapt from phieuthu where mapt like '%" + chuoi + "%'order by mapt desc")));
                if (ds_tam.Tables.Count == 0)
                    mamoi = chuoi + "0001";
                else
                {
                    string matam = ds_tam.Tables[0].Rows[0][0].ToString();
                    string kituso = matam.Substring(8, 4).ToString();
                    int somoi = int.Parse(kituso) + 1;
                    mamoi = chuoi + somoi.ToString("0000");
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }


            return mamoi;
        }

        private void bt_them_Click(object sender, EventArgs e)
        {
            try
            {

            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }

        }

        //private void mskTien_TextChanged(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        if (mskTien.Text.Length != 0)
        //        {
        //            txtTienchu.Text = So_chu(double.Parse(mskTien.Text));
        //        }
        //        else
        //        {
        //            txtTienchu.Text = "";
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }

        //}

        double tongtienthanhtoan=0;
        private void frmPhieuThu_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyData == Keys.F3)
                    Luu();
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }


        }
        bool kt = false;

        private void txttientra_TextChanged(object sender, EventArgs e)
        {
            if (txttientra.Text.Length != 0)
            {
                txttientra.Text = double.Parse(txttientra.Text).ToString("#,##0");

                txtTienchu.Text = So_chu(double.Parse(txttientra.Text));
            }
            //cho con tro ve cuoi textbox
            txttientra.SelectionStart = txttientra.Text.Length;
        }

        private void txtChungtu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbKhachhang.Focus();
        }

        private void cmbKhachhang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbkhoanmuc.Focus();
        }

        private void cmbkhoanmuc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txtLydothu.Focus();
        }

        private void txtLydothu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txttientra.Focus();
        }

        private void txttientra_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                bt_luu.Focus();
        }

        private void dtpNgaythu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txtChungtu.Focus();
        }

        private void btn_TimKiem_Click(object sender, EventArgs e)
        {
            frmBC_CongNoKhachHang cnkh = new frmBC_CongNoKhachHang();
            cnkh.Show();
        }

        private void bt_home_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bt_xemin_Click(object sender, EventArgs e)
        {

        }

        //private void gv_phieuthu_CellValueChanged(object sender, GridViewCellEventArgs e)
        //{
        //    try
        //    {
        //        if (gv_phieuthu.CurrentRow.Cells[6].Value != null)
        //        {
        //            tongtienthanhtoan = 0;
               
        //            if (kt == false)
        //            {
        //                for (int i = 0; i < gv_phieuthu.Rows.Count; i++)
        //                {
        //                    if (gv_phieuthu.Rows[i].Cells[7].Value != null)
        //                    {
        //                        tongtienthanhtoan += double.Parse(gv_phieuthu.Rows[i].Cells[6].Value.ToString());
        //                    }
        //                }
        //                mskTien.Text = tongtienthanhtoan.ToString();
        //                gv_phieuthu.CurrentRow.Cells[7].Value = true;
        //                kt = true;
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error: " + ex.Message);
        //    }
            
        //}

        //private void gv_phieuthu_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e)
        //{
        //    if (gv_phieuthu.CurrentRow.Index != -1)
        //    {
        //        string mahdbs = gv_phieuthu.CurrentRow.Cells[8].Value.ToString();
        //        txtcongno.Text = mahdbs;
        //    }
        //}

    }
}
